let phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
let telReg = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
let mobileReg = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/
// let idfReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
let houseReg = /^1[45][0-9]{7}|([P|p|S|s]\d{7})|([S|s|G|g]\d{8})|([Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\d{8})|([H|h|M|m]\d{8，10})$/
export function validatePhone (rule, value, callback) {
  setTimeout(() => {
    if (!phoneReg.test(value)) {
      callback(new Error('手机格式有误'))
    } else {
      callback()
    }
  }, 1000)
}
export function validateMobile (rule, value, callback) {
  setTimeout(() => {
    if (!mobileReg.test(value) && !telReg.test(value)) {
      callback(new Error('电话格式有误'))
    } else {
      callback()
    }
  }, 1000)
}
export function validateHouse (rule, value, callback) {
  if (!value) {
    return callback(new Error('护照不能为空!!'))
  }
  setTimeout(() => {
    if (!houseReg.test(value)) {
      callback(new Error('护照格式有误'))
    } else {
      callback()
    }
  }, 1000)
}
var checkCode = function (val) {
  var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] // 每一项对应的乘数
  // 求和以后除以11 对应parity的下表取值 就是最后一位
  var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
  var code = val.substring(17)
  if (p.test(val)) {
    var sum = 0
    for (var i = 0; i < 17; i++) {
      sum += val[i] * factor[i]
    }
    if (parity[sum % 11].toString() === code.toUpperCase()) {
      return true
    }
  }
  return false
}
var checkDate = function (val) {
  var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/
  if (pattern.test(val)) {
    var year = val.substring(0, 4)
    var month = val.substring(4, 6)
    var date = val.substring(6, 8)
    var date2 = new Date(year + '-' + month + '-' + date)
    if (date2 && parseInt(date2.getMonth()) === parseInt(month) - 1) {
      return true
    }
  }
  return false
}
var checkProv = function (val) {
  var pattern = /^[1-9][0-9]/
  var provs = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江 ',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北 ',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏 ',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门'
  }
  if (pattern.test(val)) {
    if (provs[val]) {
      return true
    }
  }
  return false
}
export function validateIdefer (rule, value, callback, flag) {
  if (flag !== 1) {
    if (!value) {
      return callback(new Error('身份证不能为空!!'))
    }
  } else {
    if (!value) {
      callback()
      return true
    }
  }
  setTimeout(() => {
    if (checkCode(value)) {
      var date = value.substring(6, 14)
      if (checkDate(date)) {
        if (checkProv(value.substring(0, 2))) {
          callback()
          console.log(111)
          return true
        } else {
          console.log(222)
          callback(new Error('身份证格式有误'))
          return false
        }
      } else {
        console.log(333)
        callback(new Error('身份证格式有误'))
        return false
      }
    } else {
      console.log(444)
      callback(new Error('身份证格式有误'))
      return false
    }
  }, 1000)
}
